#include "Lobby.h"

Lobby::Lobby(BaseObjectType* cobject,
	const Glib::RefPtr<Gtk::Builder>& refGlade) :
	Gtk::Window(cobject), builder(refGlade) {

	builder->get_widget("winlobby", winlobby);
	builder->get_widget("treeview", treeview);
	builder->get_widget("buttonnueva", buttonnueva);
	builder->get_widget("buttonunirse", buttonunirse);
	builder->get_widget("buttonaceptar", buttonaceptar);
	builder->get_widget("spinnivel", spinnivel);
	builder->get_widget("spinmax", spinmax);
	builder->get_widget("buttonsalir", buttonsalir);
	builder->get_widget("buttoncancelar", buttoncancelar);
	builder->get_widget("windownuevo", windownueva);

	refListStore = Gtk::ListStore::create(columns);
	treeview->set_model(refListStore);
	treeview->append_column("Nivel         ", columns.col_nivel);
	treeview->append_column(" Cant Jugadores       ", columns.col_max);
	treeview->append_column(" Conectados      ", columns.col_conectados);

	buttonnueva->signal_clicked().connect(
	sigc::mem_fun(*this, &Lobby::on_buttonnueva_clicked));

				buttoncancelar->signal_clicked().connect(
	sigc::mem_fun(*this, &Lobby::on_buttoncancelar_clicked));

						buttonaceptar->signal_clicked().connect(
	sigc::mem_fun(*this, &Lobby::on_buttonaceptar_clicked));

									buttonsalir->signal_clicked().connect(
	sigc::mem_fun(*this, &Lobby::on_buttonsalir_clicked));

				buttonunirse->signal_clicked().connect(
	sigc::mem_fun(*this, &Lobby::on_buttonunirse_clicked));

	refTreeSelection = treeview->get_selection();
	respuesta["operacion"]="salir";

}

void Lobby::setPartidasJson(Json::Value partidas){
	partidasJson=partidas;
}


Json::Value Lobby::getRespuesta(){
	return respuesta;
}

void Lobby::on_buttoncancelar_clicked(){
	respuesta["operacion"]="cancelar";
	windownueva->hide();
}

void Lobby::on_buttonnueva_clicked(){
	windownueva->show();
	spinnivel->set_range(0,partidasJson["nivelCliente"].asInt());
}
	
			
void Lobby::on_buttonsalir_clicked(){
	respuesta["operacion"]="salir";
	winlobby->hide();
}

void Lobby::on_buttonunirse_clicked(){
	Gtk::TreeModel::iterator iter = refTreeSelection->get_selected();
	if(iter){ //If anything is selected
		Gtk::TreeModel::Row row = *iter;
		respuesta["nivel"] = (int)row[columns.col_nivel];
		respuesta["operacion"]="unirse";
		respuesta["id"]=(int)row[columns.col_id];
		respuesta["maxJugadores"]=(int)row[columns.col_max];
		winlobby->hide();
	}
}
		
void Lobby::on_buttonaceptar_clicked(){
	respuesta["operacion"] = "nueva";
	respuesta["maxJugadores"] = (int)spinmax->get_value();
	respuesta["nivel"] = (int)spinnivel->get_value();
	windownueva->hide();
	winlobby->hide();
}


void Lobby::actualizarPartidas(){
	for (Json::Value::iterator it = partidasJson["partidas"].begin(); it != partidasJson["partidas"].end(); ++it) {
		if(partidasJson["nivelCliente"] >= (*it)["nivel"].asInt()){
			Gtk::TreeModel::Row row = *(refListStore->append());
			row[columns.col_id]=(*it)["id"].asInt();
			row[columns.col_nivel] = (*it)["nivel"].asInt();
			row[columns.col_max] = (*it)["maxJugadores"].asInt();
			row[columns.col_conectados] = (*it)["conectados"].asInt();
		}
	}
}
